nethackfandomcom-20200214-history
Source:SLASH'EM 0.0.7E7F2/mactty.h
Below is the full text to mactty.h from the source code of SLASH'EM 0.0.7E7F2. To link to a particular line, write [[SLASH'EM 0.0.7E7F2/mactty.h#line123]], for example. The latest source code for vanilla NetHack is at Source code. 1. /* SCCS Id: @(#)mactty.h 3.4 1993/03/01 */ 2. /* Copyright © Jon W{tte 1993. */ 3. /* NetHack may be freely redistributed. See license for details. */ 4. 5. /* 6. * This header is the supported external interface for the "tty" window 7. * package. This package sports care-free handling of "dumb" tty windows 8. * (preferrably using monospaced fonts) - it does NOT remember the strings 9. * sent to it; rather, it uses an offscreen bitmap. 10. * 11. * For best performance, make sure it is aligned on a 32-pixel boundary 12. * (or at least a 16-pixel one) in black & white. For 24bit color, 13. * alignment doesn't matter, and for 8-bit color, alignment to every 14. * fourth pixel is most efficient. 15. * 16. * © Copyright 1993 Jon W{tte 17. */ 18. 19. /* 20. * You should really not poke in the structures used by the tty window. 21. * However, since it uses the wRefCon of windows (by calling GetWRefCon 22. * and SetWRefCon) you lose that possibility. If you still want to store 23. * information about a window, the FIRST location _pointed to_ by the 24. * wRefCon will be a void * that you can use for whatever reasons. Don't 25. * take the address of this variable and expect it to stay the same 26. * across calls to the tty window. 27. * 28. * void * my_config_ptr = * ( void * * ) GetWRefCon ( tty_window ) ; 29. */ 30. 31. /* 32. * The library uses the window's port temporarily through SetPortBits; 33. * that means you shouldn't do any funky things to the clipping region 34. * etc. Actually, you shouldn't even resize the window, as that will clip 35. * new drawing. 36. * 37. * Also, if you use this library under Pascal, remember that the string 38. * passed to add_tty_string() is a "C" style string with NO length byte, 39. * and a terminating zero byte at the end instead. 40. */ 41. 42. #ifndef _H_tty_public 43. # define _H_tty_public 44. #undef red /* undef internal color const strings from decl */ 45. #undef green 46. #undef blue 47. #if !TARGET_API_MAC_CARBON 48. # include 49. #endif 50. 51. /* 52. * Error code returned when it's probably our fault, or 53. * bad parameters. 54. */ 55. #define general_failure 1 56. 57. /* 58. * Base resource id's for window types 59. */ 60. #define WIN_BASE_RES 128 61. #define WIN_BASE_KIND 128 62. 63. /* 64. * Commonly used characters 65. */ 66. #define CHAR_ENTER ((char)3) 67. #define CHAR_BELL ((char)7) 68. #define CHAR_BS ((char)8) 69. #define CHAR_LF ((char)10) 70. #define CHAR_CR ((char)13) 71. #define CHAR_ESC ((char)27) 72. #define CHAR_BLANK ((char)32) 73. #define CHAR_DELETE ((char)127) 74. 75. extern char game_active; /* flag to window rendering routines not to use ppat */ 76. /* 77. * If you want some fancy operations that not a normal TTY device normally 78. * supports, use EXTENDED_SUPPORT. For frames, area erases and area scrolls, 79. * plus bitmap graphics - RESOLUTION DEPENDENT, be sure to call 80. * get_tty_metrics and use those limits. 81. */ 82. #define EXTENDED_SUPPORT 0 83. /* 84. * if you print a lot of single characters, accumulating each one in a 85. * clipping region will take too much time. Instead, define this, which 86. * will clip in rects. 87. */ 88. #define CLIP_RECT_ONLY 1 89. 90. typedef enum tty_attrib { 91. 92. /* 93. * Flags relating to the general functioning of the window. 94. * These flags are passed at create_tty time, and changing them 95. * later will clear the screen. 96. */ 97. TTY_ATTRIB_FLAGS , 98. /* 99. * When using proportional fonts, this will place each character 100. * separately, ensuring aligned columns (but looking ugly and taking 101. * time) 102. */ 103. # define TA_MOVE_EACH_CHAR 1L 104. /* 105. * This means draw each change as it occurs instead of collecting the area 106. * and draw it all at once at update_tty() - slower, but more reliable. 107. */ 108. # define TA_ALWAYS_REFRESH 2L 109. /* 110. * When reaching the right end, we either just stop drawing, or wrap to the 111. * next line. 112. */ 113. # define TA_WRAP_AROUND 4L 114. /* 115. * Overstrike means that characters are added on top of each other; i e don't 116. * clear the letter beneath. This is faster, using srcOr under QuickDraw 117. */ 118. # define TA_OVERSTRIKE 8L 119. /* 120. * We may want the window not to scroll when we reach the end line, 121. * but stop drawing instead. 122. */ 123. # define TA_INHIBIT_VERT_SCROLL 16L 124. 125. /* 126. * Foreground and background colors. These only affect characters 127. * drawn by subsequent calls; not what's already there (but it does 128. * affect clears) 129. * On b/w screens these do nothing. 130. */ 131. TTY_ATTRIB_FOREGROUND , 132. TTY_ATTRIB_BACKGROUND , 133. # define TA_RGB_TO_TTY® ((((long)(®.red>>8)&0xff)<<16)+\ 134. (((long)(®.green>>8)&0xff)<<8)+((long)(®.blue>>8)&0xff)) 135. 136. /* 137. * Attributes relating to the cursor, and character set mappings 138. */ 139. TTY_ATTRIB_CURSOR , 140. /* 141. * Blinking cursor is more noticeable when it's idle 142. */ 143. # define TA_BLINKING_CURSOR 1L 144. /* 145. * When handling input, do we echo characters as they are typed? 146. */ 147. # define TA_ECHO_INPUT 2L 148. /* 149. * Do we return each character code separately, or map delete etc? Note 150. * that non-raw input means getchar won't return anything until the user 151. * has typed a return. 152. */ 153. # define TA_RAW_INPUT 4L 154. /* 155. * Do we print every character as it is (including BS, NL and CR!) or do 156. * do we interpret characters such as NL, BS and CR? 157. */ 158. # define TA_RAW_OUTPUT 8L 159. /* 160. * When getting a NL, do we also move to the left? 161. */ 162. # define TA_NL_ADD_CR 16L 163. /* 164. * When getting a CR, do we also move down? 165. */ 166. # define TA_CR_ADD_NL 32L 167. /* 168. * Wait for input or return what we've got? 169. */ 170. # define TA_NONBLOCKING_IO 64L 171. 172. /* 173. * Use this macro to cast a function pointer to a tty attribute; this will help 174. * portability to systems where a function pointer doesn't fit in a long 175. */ 176. # define TA_ATTRIB_FUNC(x) ((long)(x)) 177. 178. /* 179. * This symbolic constant is used to check the number of attributes 180. */ 181. TTY_NUMBER_ATTRIBUTES 182. 183. } tty_attrib ; 184. 185. /* 186. * Character returned by end-of-file condition 187. */ 188. # define TTY_EOF -1 189. 190. 191. /* 192. * Create the window according to a resource WIND template. 193. * The window pointer pointed to by window should be NULL to 194. * allocate the window record dynamically, or point to a 195. * WindowRecord structure already allocated. 196. * 197. * Passing in_color means you have to be sure there's color support; 198. * on the Mac, this means 32bit QuickDraw present, else it will 199. * crash. Not passing in_color means everything's rendered in 200. * black & white. 201. */ 202. extern short create_tty ( WindowPtr * window , short resource_id , 203. Boolean in_color ) ; 204. 205. /* 206. * Use init_tty_name or init_tty_number to initialize a window 207. * once allocated by create_tty. Size parameters are in characters. 208. */ 209. 210. extern short init_tty_number ( WindowPtr window , short font_number , 211. short font_size , short x_size , short y_size ) ; 212. 213. /* 214. * Close and deallocate a window and its data 215. */ 216. extern short destroy_tty ( WindowPtr window ) ; 217. 218. /* 219. * Change the font and font size used in the window for drawing after 220. * the calls are made. To change the coordinate system, be sure to call 221. * force_tty_coordinate_system_recalc() - else it may look strange if 222. * the new font doesn't match the old one. 223. */ 224. extern short set_tty_font_name (winid window_type , char * name ) ; 225. extern short force_tty_coordinate_system_recalc ( WindowPtr window ) ; 226. 227. /* 228. * Getting some metrics about the tty and its drawing. 229. */ 230. extern short get_tty_metrics ( WindowPtr window , short * x_size , 231. short * y_size , short * x_size_pixels , short * y_size_pixels , 232. short * font_number , short * font_size , 233. short * char_width , short * row_height ) ; 234. 235. /* 236. * The basic move cursor function. 0,0 is topleft. 237. */ 238. extern short move_tty_cursor ( WindowPtr window , short x_pos , 239. short y_pos ) ; 240. 241. /* 242. * Flush all changes done to a tty to the screen (see TA_ALWAYS_UPDATE above) 243. */ 244. extern short update_tty ( WindowPtr window ) ; 245. 246. /* 247. * Add a character to the tty and update the cursor position 248. */ 249. extern short add_tty_char ( WindowPtr window , short character ) ; 250. 251. /* 252. * Add a string of characters to the tty and update the cursor 253. * position. The string is 0-terminated! 254. */ 255. extern short add_tty_string ( WindowPtr window , const char * string ) ; 256. 257. /* 258. * Change or read an attribute of the tty. Note that some attribute changes 259. * may clear the screen. See the above enum and defines for values. 260. * Attributes can be both function pointers and special flag values. 261. */ 262. extern short get_tty_attrib ( WindowPtr window , tty_attrib attrib , 263. long * value ) ; 264. extern short set_tty_attrib ( WindowPtr window , tty_attrib attrib , 265. long value ) ; 266. 267. /* 268. * Scroll the actual TTY image, in characters, positive means up/left 269. * scroll_tty ( my_tty , 0 , 1 ) means a linefeed. Is always carried out 270. * directly, regardless of the wait-update setting. Does updates before 271. * scrolling. 272. */ 273. extern short scroll_tty ( WindowPtr window , short delta_x , 274. short delta_y ) ; 275. 276. /* 277. * Erase the offscreen bitmap and move the cursor to 0,0. Re-init some window 278. * values (font etc) Is always carried out directly on-screen, regardless of 279. * the wait-for-update setting. Clears update area. 280. */ 281. extern short clear_tty ( WindowPtr window ) ; 282. 283. /* 284. * Call this routine with a window (always _mt_window) and a time (usually 285. * from most recent event) to determine if cursor in window should be blinked 286. */ 287. extern short blink_cursor ( WindowPtr window , long when ) ; 288. 289. /* 290. * For screen dumps, open the printer port and call this function. Can be used 291. * for clipboard as well (only for a PICT, though; this library doesn't concern 292. * itself with characters, just bitmaps) 293. */ 294. extern short image_tty ( EventRecord *theEvent, WindowPtr window ) ; 295. 296. /* 297. * For erasing just an area of characters 298. */ 299. extern short clear_tty_window ( WindowPtr window , short from_row , 300. short from_col , short to_row , short to_col ) ; 301. 302. /* 303. * get and set the invalid region of the main window 304. */ 305. extern short get_invalid_region (WindowPtr window, Rect *inval_rect); 306. extern short set_invalid_region (WindowPtr window, Rect *inval_rect); 307. 308. /* 309. * Now in macsnd.c, which seemed like a good place 310. */ 311. extern void tty_nhbell (); 312. 313. #if EXTENDED_SUPPORT 314. 315. /* 316. * Various versions of delete character/s, insert line/s etc can be handled by 317. * this general-purpose function. Negative num_ means delete, positive means 318. * insert, and you can never be sure which of row and col operations come first 319. * if you specify both... 320. */ 321. extern short mangle_tty_rows_columns ( WindowPtr window , 322. short from_row , short num_rows , short from_col , short num_cols ) ; 323. 324. /* 325. * For framing an area without using grahpics characters. 326. * Note that the given limits are those used for framing, you should not 327. * draw in them. frame_fatness should typically be 1-5, and may be clipped 328. * if it is too large. 329. */ 330. extern short frame_tty_window ( WindowPtr window , short from_row , 331. short from_col , short to_row , short to_col , short frame_fatness ) ; 332. 333. /* 334. * For inverting specific characters after the fact. May look funny in color. 335. */ 336. extern short invert_tty_window ( WindowPtr window , short from_row , 337. short from_col , short to_row , short to_col ) ; 338. 339. /* 340. * For drawing lines on the tty - VERY DEVICE DEPENDENT. Use get_tty_metrics. 341. */ 342. extern short draw_tty_line ( WindowPtr window , short from_x , 343. short from_y , short to_x , short to_y ) ; 344. 345. #endif /* EXTENDED_SUPPORT */ 346. 347. #endif /* _H_tty_public */ mactty.h